perm filename BOWLS.SAI[ALS,ALS]1 blob
sn#174563 filedate 1975-08-24 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "BOWLS"
C00008 ENDMK
C⊗;
BEGIN "BOWLS"
DEFINE ⊂="BEGIN",⊃="END",$="COMMENT";
DEFINE \=" "; $ DEFINE \="SAFE"; $ Simple way to change to SAFE;
INTEGER ARRAY BUF[0:511];
INTEGER I,J,K,L,SCORE,EOF,BRCHR,CHAN1,CHAN2;
STRING READ1,READ2,READ3,READX;
BOOLEAN ER;
PROCEDURE NEWNAM;
⊂ "NEW"
OUTSTR ("Type full name for record = ");
READ1←INCHWL;
READ1←READ1&" "; $ Pad out with spaces;
READX←READX&READ1[1 to 20]; $ Limit name to 4 words;
OUTSTR ("Type Apartment number = ");
READ2←INCHWL;
IF READ2="" THEN READ2←" " ELSE READ2←READ2&" ";
READX←READX&READ2[1 to 5];
OUTSTR ("Type approximate rating = ");
READ3←INCHWL;
READ3←READ3&" ";
READX←READX&READ3[1 to 5];
⊃ "NEW";
PROCEDURE MKROOM;
⊂ FOR K←J STEP 8 UNTIL 511 DO IF BUF[K]=0 THEN DONE;
FOR K←K-8 STEP -1 UNTIL J DO BUF[K+8]←BUF[K];
⊃ ;
PROCEDURE NAME;
⊂ "NAME"
WHILE TRUE DO "TLOOP"
⊂ OUTSTR ("Type NICKNAME = ");
READX←INCHWL;
IF READX="" THEN DONE "TLOOP";
LENX←LENGTH(READX)
FOR I←0 STEP 8 UNTIL 511 DO
⊂ "ILOOP"
IF BUF[I]=0 THEN DONE "ILOOP";
READ1←CVSTR(BUF[I])[1 FOR LENX]; J←I+8; READ2←CVSTR(BUF[J])[1 FOR LENX];
IF READX≤READ2 THEN
⊂ IF READX≥READ1 THEN
⊂ IF READ1=READ2 THEN
⊂ OUTSTR ("Ambiguous! type more letters "); DONE "ILOOP";
⊃ ;
IF READX=READ1 THEN DONE "ILOOP";
IF (READX>READ1)∧(READX<READ2) THEN
⊂ OUTSTR ("Is this a new nickname? (Y or N) ");
IF INCHWL="Y" THEN
⊂ MKROOM;
NEWNAME;
⊃ ;
⊃ ELSE
⊂ FOR K←1 STEP 1 UNTIL LENX DO IF READX[K FOR 1]≠READ1[K FOR 1] THEN DONE;
FOR L←1 STEP 1 UNTIL LENX DO IF READX[L FOR 1]≠READ2[L FOR 1] THEN DONE;
IF K>L THEN
⊂ OUTSTR ("Do you mean "&READ1&" Y or N? ");
IF INCHWL="Y" THEN
⊂ READX←READ1;
DONE "NAME";
⊃ ELSE
⊂ OUTSTR ("Try again ");
DONE "ILOOP";
⊃ ;
⊃ ;
IF K<L THEN
⊂ OUTSTR ("Do you mean "&READ2&" Y or N? ");
IF INCHWL="Y" THEN
⊂ READX←READ2;
DONE "NAME";
⊃ ELSE
⊂ OUTSTR ("Try again ");
DONE "ILOOP";
⊃ ;
⊃ ;
IF K=L THEN
⊂ OUTSTR ("Ambiguous, type more letters");
DONE "ILOOP";
⊃ ;
⊃ ;
⊃ ;
⊃ ;
⊃ ;
⊃ ;
⊂
⊃ ELSE IF J=L THEN
IF READX[J TO J] ≠"" THEN
⊂ OUTSTR ("Abbiguous, try again ");
DONE "ILOOP";
⊃ ELSE
⊂ OUTSTR (Is this a new name Y or N? ");
IF INCHWL="Y" THEN WHILE BUF[I]≠0 DO I←I+8;
⊃ ;
⊃;
⊃ "NAME";
Q
PROCEDURE CORRECTION;
⊂ "CORRECT"
NAME; $ Ask for nickname;
IF READX="" THEN DONE;
⊃ "CORRECT";
PROCEDURE REPORT;
⊂ "REPORT"
⊃ "REPORT";
PROCEDURE GAME;
⊂ "GAME"
⊃ "GAME";
PROCEDURE NLIST;
⊂ "NLIST"
⊃ "NLIST";
PROCEDURE GLIST;
⊂ "GLIST"
⊃ "GLIST";
$ MAIN PROGRAM STARTS HERE;
CHAN1←1; CHAN2←2;
CLOSE (CHAN1); OPEN (CHAN1,"DSK",'10,2,0,0,0,EOF);
LOOKUP (CHAN1,"BOWLSD.DAT[ALS,ALS]",ER);
IF ER THEN OUTSTR ("BOWLD.DAT does not exist.") ELSE
ARRYIN(CHAN1,BUF[0],512); CLOSE(CHAN1);
$ Main program loop starts here;
WHILE TRUE DO
⊂ OUTSTR
("Services available are: 0. Exit call. 1. Add game. 2. Add name.
3. Make correction. 4. Ratings. 5. List names. 6. List games.
Type number for service requested = ")
I←0;
I←CVD(INCHWL);
IF (I>6)∨(I≤0) THEN DONE "BOWLS";
CASE I OF ⊂ DONE "BOWLS";GAME;NAME;CORRECT;RATE;NLIST;GLIST; ⊃ ;
⊃ ;
⊃ "BOWLS";